/**
 * 原码、反码、补码
 * 1.二进制的最高位是符号位：0表示正数，1表示负数
 * 2.正数的源码，反码，补码都一样
 * 3.负数的反码 = 它的原码符号位不变，其他位取反
 * 4.负数的补码 = 它的反码+1，负数的反码 = 负数的补码 - 1
 * 5.0的反码，补码都是0
 * 6.java没有无符号数，换言之，java中的数都是有符号的
 * 7.在计算机运算的时候，都是以补码的方式来运算的
 * 8.当我们看到运算结果的时候，要看他的源码
*/

public class BitOperatro{

	public static void main(String[] args){
		//与& ：两位全为1，结果为1，否则为0
		System.out.println(2&3);
		//或｜：两位有一位为1，结果为1，否则为0
		System.out.println(2|3);
		//异或^：两位一个为0，一个为1，结果为1，否则为0
		System.out.println(2^3);
		//取反～：0->1, 1->0


		//算术右移 
		//低位溢出，符号位不变，并用符号位补溢出的高位
		//1算术右移2位
		//0000 0001=> 0000 0000 本质 1/2/2
		System.out.println(1>>2); 
		//算术左移 
		//符号位不变，低位补0
		//1算术左移2位
		//0000 0001=> 0000 0100 本质1*2*2
		System.out.println(1<<2);

		// >>> 逻辑右移也叫无符号右移。运算规则是：低位溢出，高位补0
		//00000000  00000000 00000000 00000000
		//00000000  00000000 00000000 00000100
		System.out.println(1>>>2); 
		System.out.println(4>>>2); 
	}
}